package models

import (
	"database/sql"
)

const (
	// 方案设计类型
	DesignType_All        = iota // 所有设计类型
	DesignType_Budget            // 预算设计
	DesignType_Settlement        // 结算设计
	DesignType_Audit             // 审核设计
)

var DesignTypes = map[int]string{
	DesignType_All:        "所有设计类型",
	DesignType_Budget:     "预算设计",
	DesignType_Settlement: "结算设计",
	DesignType_Audit:      "审计定案",
}

const (
	//项目设计状态
	ProjectState_All       = iota // 所有项目状态
	ProjectState_Budget           // 待设计预算（预算未存档）
	ProjectState_Accept           // 待验收（预算已存档，待出具结算）
	ProjectState_Audit            // 待审计（结算已存档，待审计）
	ProjectState_Completed        // 已完审（审计已存档）
)

var ProjectStates = map[int]string{
	ProjectState_All:       "所有项目状态",
	ProjectState_Budget:    "预算设计",
	ProjectState_Accept:    "结算设计",
	ProjectState_Audit:     "审计定案",
	ProjectState_Completed: "已完审",
}

type DesignNorm struct { //人工定额
	NormID       int     `db:"norm_id" json:"norm_id"`
	NormCode     string  `db:"norm_code" json:"norm_code"`
	NormName     string  `db:"norm_name" json:"norm_name"`
	NormUnit     string  `db:"norm_unit" json:"norm_unit"`
	NormMechanic float64 `db:"norm_mechanic" json:"norm_mechanic"` // 技工工日
	NormGeneral  float64 `db:"norm_general" json:"norm_general"`   // 普工工日
	NormContent  string  `db:"norm_content" json:"norm_content"`
	NormRatio    float64 `db:"norm_ratio" json:"norm_ratio"`
	NormInuse    int     `db:"norm_inuse" json:"norm_inuse"`   // 是否启用
	NormRemark   string  `db:"norm_remark" json:"norm_remark"` // 备注
}

type DesignMachine struct { // 设计机械
	MachID    int     `db:"mach_id" json:"mach_id"`
	MachCode  string  `db:"mach_code" json:"mach_code"`
	MachName  string  `db:"mach_name" json:"mach_name"`
	MachUnit  string  `db:"mach_unit" json:"mach_unit"`
	MachCount int     `db:"mach_count" json:"mach_count"`
	MachPrice float64 `db:"mach_price" json:"mach_price"`
}

type DesignInstrument struct { // 设计仪器仪表
	InstID    int     `db:"inst_id" json:"inst_id"`
	InstCode  string  `db:"inst_code" json:"inst_code"`
	InstName  string  `db:"inst_name" json:"inst_name"`
	InstUnit  string  `db:"inst_unit" json:"inst_unit"`
	InstCount int     `db:"inst_count" json:"inst_count"`
	InstPrice float64 `db:"inst_price" json:"inst_price"`
}

type DesignMaterial struct { // 设计材料
	MatID     int     `db:"mat_id" json:"mat_id"`
	MatCode   string  `db:"mat_code" json:"mat_code"`
	MatSpec   string  `db:"mat_spec" json:"mat_spec"`
	MatUnit   string  `db:"mat_unit" json:"mat_unit"`
	MatPrice  float64 `db:"mat_price" json:"mat_price"`
	MatRemark string  `db:"mat_remark" json:"mat_remark"` // 备注
}

type ProjectBase struct { // 项目基本信息（设计立项填写）
	ID                int          `db:"id" json:"id"`
	Name              string       `db:"name" json:"name"`
	DesignCode        string       `db:"design_code" json:"design_code"`               // 设计编码
	ApprovalCode      string       `db:"approval_code" json:"approval_code"`           // 立项编码
	PreparationDate   sql.NullTime `db:"preparation_date" json:"preparation_date"`     // 立项日期
	OrgCode           string       `db:"org_code" json:"org_code"`                     // 建设单位编码
	Designer          string       `db:"designer" json:"designer"`                     // 设计人员
	Initiator         string       `db:"initiator" json:"initiator"`                   // 申报单位
	Reviewer          string       `db:"reviewer" json:"reviewer"`                     // 审核人
	ProjectState      int          `db:"project_state" json:"project_state"`           // 项目状态
	ProjectType       string       `db:"project_type" json:"project_type"`             // 项目类型
	BusinessType      string       `db:"business_type" json:"business_type"`           // 业务类型（项目发起）
	ConstructionType  string       `db:"construction_type" json:"construction_type"`   // 建设类型
	ProjectOverview   string       `db:"project_overview" json:"project_overview"`     // 项目概况
	TechnicalAnalysis string       `db:"technical_analysis" json:"technical_analysis"` // 技术分析

	PointOld        int                 `db:"point_old" json:"point_old"`               // 现有点位数
	PointNew        int                 `db:"point_new" json:"point_new"`               // 新建点位数
	PointCost       float64             `db:"point_cost" json:"point_cost"`             // 点位成本
	RecycleCycle    int                 `db:"recycle_cycle" json:"recycle_cycle"`       // 回收周期（月）
	ProfitStatement string              `db:"profit_statement" json:"profit_statement"` // 收益说明
	DesignConfig    ProjectDesignConfig `db:"" json:"design_config"`                    //折扣率 系数 税率
}

type ProjectBaseLite struct { // 项目基本信息（设计立项填写）
	ID                int          `db:"id" json:"id"`
	Name              string       `db:"name" json:"name"`                             //项目名称
	DesignCode        string       `db:"design_code" json:"design_code"`               //设计编码
	OrgCode           string       `db:"org_code" json:"org_code"`                     // 建设单位编码
	Designer          string       `db:"designer" json:"designer"`                     // 设计人员
	Initiator         string       `db:"initiator" json:"initiator"`                   // 项目发起方
	Reviewer          string       `db:"reviewer" json:"reviewer"`                     // 审核人
	ProjectType       string       `db:"project_type" json:"project_type"`             // 项目类型
	BusinessType      string       `db:"business_type" json:"business_type"`           // 业务类型
	ConstructionType  string       `db:"construction_type" json:"construction_type"`   // 建设类型
	ProjectOverview   string       `db:"project_overview" json:"project_overview"`     // 项目概况
	TechnicalAnalysis string       `db:"technical_analysis" json:"technical_analysis"` // 技术分析
	ProfitStatement   string       `db:"profit_statement" json:"profit_statement"`     // 收益说明
	PreparationDate   sql.NullTime `db:"preparation_date" json:"preparation_date"`     // 编制日期
	ProjectState      int          `db:"project_state" json:"project_state"`           // 项目状态
}

type ProjectLite struct {
	ID              int          `db:"id" json:"id"`
	Name            string       `db:"name" json:"name"`
	DesignCode      string       `db:"design_code" json:"design_code"`           // 设计编码
	ProjectState    int          `db:"project_state" json:"project_state"`       // 项目状态
	ApprovalCode    string       `db:"approval_code" json:"approval_code"`       // 立项编码
	PreparationDate sql.NullTime `db:"preparation_date" json:"preparation_date"` // 编制日期
	OrgCode         string       `db:"org_code" json:"org_code"`                 // 建设单位编码
	Designer        string       `db:"designer" json:"designer"`                 // 设计人员
	TotalCost       float64      `db:"" json:"total_cost"`                       // 总造价
}

type LaborItem struct { // 项目库：人工工日
	ID          int                  `db:"id" json:"id"`
	LID         string               `db:"lid" json:"lid"`
	DesignCode  string               `db:"design_code" json:"design_code"`
	DesignType  int                  `db:"design_type" json:"design_type"`
	Code        string               `db:"code" json:"code"`         //条目编码
	Quantity    float64              `db:"quantity" json:"quantity"` //预算数量
	Remark      string               `db:"remark" json:"remark"`
	Conversions []NormConversionItem `db:"" json:"conversions"`
	Machines    []MachineItem        `db:"" json:"machines"`
	Instruments []InstrumentItem     `db:"" json:"instruments"`
}

type NormConversionItem struct {
	NciID int    `db:"nci_id"      json:"nci_id"`
	LID   string `db:"lid" json:"lid"`
}

type MachineItem struct { // 项目库：机械台班
	LID      string  `db:"lid" json:"lid"`
	MachID   int     `db:"mach_id" json:"mach_id"`
	Quantity float64 `db:"quantity" json:"quantity"` //预算数量（单价需要查询）
	Remark   string  `db:"remark" json:"remark"`
}
type InstrumentItem struct { // 项目库：仪器仪表
	LID      string  `db:"lid" json:"lid"`
	InstID   int     `db:"inst_id" json:"inst_id"`
	Quantity float64 `db:"quantity" json:"quantity"` //预算数量（单价需要查询）
	Remark   string  `db:"remark" json:"remark"`
}

type MaterialItem struct { // 项目库：物料
	DesignCode string  `db:"design_code" json:"design_code"`
	DesignType int     `db:"design_type" json:"design_type"`
	Code       string  `db:"Code" json:"code"`         //条目编码
	Name       string  `db:"name" json:"name"`         //条目规格
	Price      float64 `db:"Price" json:"price"`       //单价（不含税，需要计算获取）
	Quantity   float64 `db:"Quantity" json:"quantity"` //预算数量
	Remark     string  `db:"Remark" json:"remark"`
}

type OtherFeeItem struct {
	ID          int     `db:"id" json:"id"`
	DesignCode  string  `db:"design_code" json:"design_code"`
	DesignType  int     `db:"design_type" json:"design_type"`
	Name        string  `db:"name" json:"name"`
	Basis       string  `db:"basis" json:"basis"`
	TaxIncluded float64 `db:"tax_included" json:"tax_included"`
	Remark      string  `db:"remark" json:"remark"`
}

type ProjectTable struct {
	DesignCode    string         `db:"design_code" json:"design_code"`
	DesignType    int            `db:"design_type" json:"design_type"`
	OrgCode       string         `db:"org_code" json:"org_code"`
	LaborTable    []LaborItem    `db:"" json:"labor_table"`
	MaterialTable []MaterialItem `db:"" json:"material_table"`
	OtherFeeTable []OtherFeeItem `db:"" json:"other_fee_table"`
}

type MaterialBalanceItem struct {
	Code      string `db:"code" json:"code"`
	Name      string `db:"wlname" json:"name"`
	Price     string `db:"xmdj" json:"price"`
	Count     string `db:"nnum" json:"count"`
	Money     string `db:"nmny" json:"money"`
	PkOrg     string `db:"pk_org" json:"pk_org"`
	StoreName string `db:"ckname" json:"store_name"`
}

type MaterialBalance struct {
	ProjectCode string                `db:"project_code" json:"project_code"`
	ProjectName string                `db:"project_name" json:"project_name"`
	Count       int                   `db:"count" json:"count"` // 条目数量
	TotalCost   float64               `db:"total_cost" json:"total_cost"`
	Items       []MaterialBalanceItem `db:"" json:"items"`
}

type MaterialOutboundItem struct {
	MATERIAL_CODE  string  `db:"material_code" json:"material_code"`
	MATERIAL_NAME  string  `db:"material_name" json:"material_name"`
	NCOSTPRICE     float64 `db:"ncostprice" json:"ncostprice"`
	NNUM           float64 `db:"nnum" json:"nnum"`
	ZJLNAME        string  `db:"zjlname" json:"zjlname"` // 计量单位
	NCOSTMNY       float64 `db:"ncostmny" json:"ncostmny"`
	NAME_STOCK     string  `db:"name_stock" json:"name_stock"` // 仓库名称
	PK_ORG         string  `db:"pk_org" json:"pk_org"`
	PK_ORG_NAME    string  `db:"pk_org_name" json:"pk_org_name"`
	VBILLCODE      string  `db:"vbillcode" json:"vbillcode"`       // 单号
	DBILLDATE      string  `db:"dbilldate" json:"dbilldate"`       // 单据日期
	BILLTYPENAME   string  `db:"billtypename" json:"billtypename"` //单据类型
	DEPT_NAME      string  `db:"dept_name" json:"dept_name"`
	BILLMAKER_NAME string  `db:"billmaker_name" json:"billmaker_name"`
	EPS_NAME       string  `db:"eps_name" json:"eps_name"` // 项目类型
}

type MaterialOutbound struct {
	ProjectCode string                 `db:"project_code" json:"project_code"`
	ProjectName string                 `db:"project_name" json:"project_name"`
	Count       int                    `db:"count" json:"count"` // 条目数量
	TotalCost   float64                `db:"total_cost" json:"total_cost"`
	Items       []MaterialOutboundItem `db:"" json:"items"`
}

// 表二数据（建筑安装工程费相关）
type SummaryTable2 struct {
	ConstructionCost float64 `json:"construction_cost"` // 建筑安装工程费 [表二!D6]
	LaborCost        float64 `json:"labor_cost"`        // 人工费 [表二!D9]
	MachineCost      float64 `json:"machine_cost"`      // 机械费 [表二!D15]
	InstrumentCost   float64 `json:"instrument_cost"`   // 仪器仪表费 [表二!D17]
	MeasureFee       float64 `json:"measure_fee"`       // 措施费 [表二!D17 - 表二!D18]
	ManagementFee    float64 `json:"management_fee"`    // 企业管理费 [表二!I20]
	Profit           float64 `json:"profit"`            // 利润 [表二!I21]
	Tax              float64 `json:"tax"`               // 增值税 [表二!I22] (通常为 ConstructionFee * 0.09)
}

type SummaryTable5 struct {
	OtherFee float64 `json:"other_fee"` // 工程建设其他费 [表五!D23]
	OtherTax float64 `json:"other_tax"` // 其他费增值税 [表五!E23]
}

// 表四数据（甲供材料）
type SummaryTable4 struct {
	MaterialSupply float64 `json:"material_supply"` // 甲供材料费 [表四!I36]
}

// 表一汇总结果
type SummaryTable struct {
	BaseTotal        float64 // 基础合计（未下浮）
	BaseTax          float64 // 基础增值税
	BaseTotalWithTax float64 // 基础含税总价

	DiscountDetails map[string]float64 // 下浮费用明细

	FinalConstructionCost float64 // 下浮后建筑安装工程费
	FinalTax              float64 // 下浮后增值税
	FinalTotalWithTax     float64 // 下浮后含税总价

	PaymentToBuilder float64 // 应支付施工方（含税）
	FixedAssetsTotal float64 // 固定资产合计
}

// 最新材料采购价
type MaterialLastPrice struct {
	MaterialCode string  `db:"MATERIAL_CODE" json:"material_code"`
	LastPrice    float64 `db:"LASTPRICE" json:"lastprice"`
}

// 最新结存成本价格
type MaterialNabPrice struct {
	MaterialCode string  `db:"material_code" json:"material_code"`
	NabPrice     float64 `db:"nabprice" json:"nabprice"`
}

type ProjectLaborLite struct {
	Code     string         `db:"code"`
	Lid      sql.NullString `db:"lid"`
	Quantity float64        `db:"quantity"`
	Mechanic float64        `db:"mechanic"`
	General  float64        `db:"general"`
}

type ProjectMachineLite struct {
	Lid     sql.NullString `db:"lid"`
	Machine float64        `db:"machine"`
}

type ProjectInstrumentLite struct {
	Lid        sql.NullString `db:"lid"`
	Instrument float64        `db:"instrument"`
}
